﻿using System.ComponentModel.Composition;
using System.Windows;
using MediaAssistant.Controls.Dialog;
using MediaAssistant.Data;
using MediaAssistant.Helper;
using MefBasic;
using MediaAssistant.DAL;

namespace MediaAssistant.Controls.PlaylistSelector
{
    [Export]
    [PartCreationPolicy(CreationPolicy.NonShared)]
    public class PlaylistSelectorPresenter : APresenter<PlaylistSelectorView>, IDialogContentPresenter
    {
        [ImportingConstructor]
        public PlaylistSelectorPresenter(PlaylistSelectorView view) : base(view)
        {
            
        }

        [Import]
        public LibraryDataSource DataSource
        {
            get { return (LibraryDataSource)GetValue(DataSourceProperty); }
            set { SetValue(DataSourceProperty, value); }
        }

        public static readonly DependencyProperty DataSourceProperty =
            DependencyProperty.Register("DataSource", typeof(LibraryDataSource), typeof(PlaylistSelectorPresenter), new UIPropertyMetadata(null, OnPropertyChanged));

        protected override void DoPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            switch (e.Property.Name)
            {
                case "DataSource":
                    if (string.IsNullOrWhiteSpace(RegistryHelper.LastSelectedPlaylist) == false && DataSource.IsPlaylistExists(RegistryHelper.LastSelectedPlaylist))
                    {
                        PlaylistTitle = RegistryHelper.LastSelectedPlaylist;
                    }
                    else
                        PlaylistTitle = DatabaseManager.Instance.GetNowPlayingPlaylist().Title;
                    break;
            }
        }
        
        public string PlaylistTitle
        {
            get { return (string)GetValue(PlaylistTitleProperty); }
            set { SetValue(PlaylistTitleProperty, value); }
        }

        public static readonly DependencyProperty PlaylistTitleProperty =
            DependencyProperty.Register("PlaylistTitle", typeof(string), typeof(PlaylistSelectorPresenter), new UIPropertyMetadata(null));

        #region Implementation of IDialogContentPresenter

        public bool OnClosing(DialogResult dialogResult)
        {
            if (dialogResult == DialogResult.Cancel)
                return true;
            if (string.IsNullOrWhiteSpace(PlaylistTitle))
                return false;
            Playlist = !DataSource.IsPlaylistExists(PlaylistTitle) ? DataSource.CreatePlaylist(PlaylistTitle) : DataSource.GetPlaylist(PlaylistTitle);
            RegistryHelper.LastSelectedPlaylist = Playlist.Title;
            return true;
        }



        public LibraryItem Playlist { get; set; }

        #endregion
    }

}
